\documentclass[a4paper]{ctexart}
%\documentclass[UTF8]{ctexart}

\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{float}

\title{The report of Project1}
\author{Shao kexin \\ student number: 3200103310}

\begin{document}
\maketitle
\section{文件介绍}
\subsection{头文件Splines.h}
该文件内包含了两种样条插值算法，分别为$ppFrom $和 $B-splines$。主要将两者分成两个类。

$ppFrom$ 的主要实现思想是参照课本$Lemma3.3$和$Lemma3.4$，将求解样条问题转化为求列向量m（一阶导数）或M（二阶导数）。

ppFrom类内置三个子函数\verb|solve_c、solve_n、solve_s|，分别用于求解完全样条、自然样条、指定二阶导数样条三种边界条件，\textbf{返回值为样条的系数}。其中\verb|solve_c、solve_s|需要输入两个参数，用于读取给定的边界条件，而\verb|solve_n|不需要输入参数，因为自然样条可以看成制定二阶导数样条的特殊情况。

B-splines 的主要实现内容为课本$Theorem3.57$和$Theorem3.58$, 确定$B^2、B^3$样条后(通过类$B2、B3$构造)，通过求解矩阵方程组，确定B样条的系数a。根据公式
\begin{equation}
  S(x) = \sum^N_{i = 0} a_iB^2_i(x),
  S(x) = \sum^N_{i = -1} a_iB^3_i(x),
\end{equation}
确定样条的值。

B-splines类内置两个子函数\verb|solve_2、solve_3|分别对应二次B样条和三次B样条。两个函数都需要输入三个参数（a，b，x），\textbf{函数会返回S（x）的值}。

\subsection{测试文件}
以题目A的函数为例，编写A.cpp文件用于测试ppFrom样条类。

首先根据题中所给的函数和x的取值规则，确定向量X和Y，生成ppFrom类的对象p。通过输入不同的求解子函数对p进行求解，函数正常运行没有报错。为了更加直观我们将得到的系数放入python中画图，得到结果:随着N的逐渐增加，插值函数与原函数的误差减少，插值函数收敛于原函数。
\begin{figure}
  \centering
  \includegraphics[width=.8\textwidth]{./A1.png}
  \caption{函数图}
\end{figure}
\begin{figure}
  \centering
  \includegraphics[width=.8\textwidth]{./A2.png}
  \caption{误差图}
\end{figure}

原本计划用题目C对B-splines进行测试，但时间来不及了。只写了一个大概的C.cpp,没有编译成功，所以没有写进Makefile文件里。

\subsection{Maketitle文件}
一共有两个 Maketitle文件，分别在doc目录下和src目录下。

doc目录下输入\verb|make|命令用于编译report.tex文件并删除多余文件，输入\verb|make clean |命令可将文件恢复原样;src目录下输入\verb|make|命令用于编译A.cpp、Splines.h文件并删除多余文件，输入\verb|make clean |命令可将文件恢复原样。
\end{document}
